/* 
 * File:   svg_polygon_path.h
 * Author: Satan
 *
 * Created on September 12, 2012, 9:19 PM
 */

#ifndef SVG_POLYGON_PATH_H
#define	SVG_POLYGON_PATH_H

#include "svgloader/svg_polygon.h"
#include "svgloader/svg_path.h"
#include "hfgl/hfgl_surface.h"

#include <string>
#include <vector>

// Класс полигона типа path из SVG
class svg_polygon_path : public svg_polygon
{
    public:
        svg_polygon_path(TiXmlElement*);
        svg_polygon_path(const svg_polygon_path& orig);
        virtual ~svg_polygon_path();
        
        // Возврат поверхности поточечно
        hfgl_surface* getSurface(int);
        
    private:
        // Список инструкций по составлению поверхности
        std::vector<svg_path_instruction*> m_instructions;
        
        // Получение числа из строки начиная с определенной позиции. В итоге позиция меняется на точку окончания записи числа в строке
        float getFloat(std::string*, int*);
        
        // Проверка выпуклости многоугольника
        bool isPolyConvex(std::vector<hfgl_point>*);
        inline GLfloat classify_point2D(hfgl_point, hfgl_point, hfgl_point);
        inline int sign(GLfloat);
};

#endif	/* SVG_POLYGON_PATH_H */

